home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Headers / architecture / m68k / byte_order.h < prev    next >
Text File  |  1993-03-12  |  3KB  |  152 lines

  1. /*
  2.  * Copyright (c) 1992 NeXT Computer, Inc.
  3.  *
  4.  * Byte ordering conversion (for m68k).
  5.  *
  6.  * HISTORY
  7.  *
  8.  * 8 October 1992 David E. Bohman at NeXT
  9.  *    Converted to NXxxx versions.  Condensed history.
  10.  *
  11.  * 28 August 1992 Bruce Martin @NeXT
  12.  *    Created.
  13.  */
  14.  
  15. static __inline__
  16. unsigned short
  17. NXSwapShort(
  18.     unsigned short    inv
  19. )
  20. {
  21.     union sconv {
  22.     unsigned short    us;
  23.     unsigned char    uc[2];
  24.     } *inp, outv;
  25.     
  26.     inp = (union sconv *)&inv;
  27.     
  28.     outv.uc[0] = inp->uc[1];
  29.     outv.uc[1] = inp->uc[0];
  30.     
  31.     return (outv.us);
  32. }
  33.  
  34. static __inline__
  35. unsigned int
  36. NXSwapInt(
  37.     unsigned int    inv
  38. )
  39. {
  40.     union iconv {
  41.     unsigned int    ui;
  42.     unsigned char    uc[4];
  43.     } *inp, outv;
  44.     
  45.     inp = (union iconv *)&inv;
  46.     
  47.     outv.uc[0] = inp->uc[3];
  48.     outv.uc[1] = inp->uc[2];
  49.     outv.uc[2] = inp->uc[1];
  50.     outv.uc[3] = inp->uc[0];
  51.     
  52.     return (outv.ui);
  53. }
  54.  
  55. static __inline__
  56. unsigned long
  57. NXSwapLong(
  58.     unsigned long    inv
  59. )
  60. {
  61.     union lconv {
  62.     unsigned long    ul;
  63.     unsigned char    uc[4];
  64.     } *inp, outv;
  65.     
  66.     inp = (union lconv *)&inv;
  67.     
  68.     outv.uc[0] = inp->uc[3];
  69.     outv.uc[1] = inp->uc[2];
  70.     outv.uc[2] = inp->uc[1];
  71.     outv.uc[3] = inp->uc[0];
  72.     
  73.     return (outv.ul);
  74. }
  75.  
  76. static __inline__
  77. unsigned long long
  78. NXSwapLongLong(
  79.     unsigned long long    inv
  80. )
  81. {
  82.     union llconv {
  83.     unsigned long long    ull;
  84.     unsigned char        uc[8];
  85.     } *inp, outv;
  86.     
  87.     inp = (union llconv *)&inv;
  88.     
  89.     outv.uc[0] = inp->uc[7];
  90.     outv.uc[1] = inp->uc[6];
  91.     outv.uc[2] = inp->uc[5];
  92.     outv.uc[3] = inp->uc[4];
  93.     outv.uc[4] = inp->uc[3];
  94.     outv.uc[5] = inp->uc[2];
  95.     outv.uc[6] = inp->uc[1];
  96.     outv.uc[7] = inp->uc[0];
  97.     
  98.     return (outv.ull);
  99. }
  100.  
  101. static __inline__ NXSwappedFloat
  102. NXConvertHostFloatToSwapped(float x)
  103. {
  104.     union fconv {
  105.     float number;
  106.     NXSwappedFloat sf;
  107.     };
  108.     return ((union fconv *)&x)->sf;
  109. }
  110.  
  111. static __inline__ float
  112. NXConvertSwappedFloatToHost(NXSwappedFloat x)
  113. {
  114.     union fconv {
  115.     float number;
  116.     NXSwappedFloat sf;
  117.     };
  118.     return ((union fconv *)&x)->number;
  119. }
  120.  
  121. static __inline__ NXSwappedDouble
  122. NXConvertHostDoubleToSwapped(double x)
  123. {
  124.     union dconv {
  125.     double number;
  126.     NXSwappedDouble sd;
  127.     };
  128.     return ((union dconv *)&x)->sd;
  129. }
  130.  
  131. static __inline__ double
  132. NXConvertSwappedDoubleToHost(NXSwappedDouble x)
  133. {
  134.     union dconv {
  135.     double number;
  136.     NXSwappedDouble sd;
  137.     };
  138.     return ((union dconv *)&x)->number;
  139. }
  140.  
  141. static __inline__ NXSwappedFloat
  142. NXSwapFloat(NXSwappedFloat x)
  143. {
  144.     return NXSwapLong(x);
  145. }
  146.  
  147. static __inline__ NXSwappedDouble
  148. NXSwapDouble(NXSwappedDouble x)
  149. {
  150.     return NXSwapLongLong(x);
  151. }
  152.